﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FrontEndPlus.Módulos.RRHH
{
    public partial class wbfrm_Creditos : System.Web.UI.Page
    {
        #region Variables

        private WCF_Gimnasio.cls_Empleado _empleado = new WCF_Gimnasio.cls_Empleado();
        private WCF_Gimnasio.cls_Credito _credito = new WCF_Gimnasio.cls_Credito();

        #endregion

        #region Metodos

        private void BuscarEmpleado()
        {
            _empleado.IdEmpleado = Convert.ToInt32(Session["IdEmpleado"]);

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
              Session["empleado"] = (WCF_Gimnasio.cls_Empleado)servicio.TraerObjeto(_empleado);
            }
        }

        private void CargarEmpleado()
        {
            _empleado = (WCF_Gimnasio.cls_Empleado)Session["empleado"];

            if (_empleado.IdEstado == 6)
            {
                txt_cedula.Text = _empleado.Cedula;
                txt_nombre_Completo.Text = string.Format("{0} {1}", _empleado.Nombre, _empleado.Apellido);

                txt_popup_cedula.Text = _empleado.Cedula;
                txt_popup_nombre_Completo.Text = string.Format("{0} {1}", _empleado.Nombre, _empleado.Apellido);

                _credito.IdEmpleado = Convert.ToInt32(Session["IdEmpleado"]);

                object coutaTotalPagar = 0;
                using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
                {
                    coutaTotalPagar = servicio.Listar(2, _credito).Tables[0].Rows[0][0];
                }

                lbl_cuota_Pagar.Text = ((coutaTotalPagar == Convert.DBNull) ? "0,0000" : coutaTotalPagar.ToString());
            }

            else
            {
                string script = "<script type='text/javascript'> smoke.alert('El personal seleccionado, ya no pertenece a al planilla del gimnasio.\nPor favor vuelva intentarlo.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);

                LimpiarCampos();
            }
        }

        private bool VerficarFechaIngreso()
        {
            _empleado = (WCF_Gimnasio.cls_Empleado)Session["empleado"];

            return ((_empleado.FechaIngreso >= _empleado.FechaIngreso.AddYears(1)) ? true : false);
        }

        private decimal CreditoPermitido()
        {
            _empleado = (WCF_Gimnasio.cls_Empleado)Session["empleado"];

            WCF_Gimnasio.cls_Tipo_Empleado tipoEmpleado = new WCF_Gimnasio.cls_Tipo_Empleado();
            tipoEmpleado.IdTipoEmpleado = _empleado.IdTipoEmpleado;

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                tipoEmpleado = (WCF_Gimnasio.cls_Tipo_Empleado)servicio.TraerObjeto(tipoEmpleado);
            }

            return (decimal)(((((double)tipoEmpleado.MontoHora * 8) * 8) * 4) / 1.60);
        }

        private bool GetPromedioCredito()
        {
            object promedioCredito = 0;
            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                servicio.OtrosProcesos(2, ref promedioCredito, _credito);
            }

            var temporal = Convert.ToDecimal(promedioCredito);
            temporal += _credito.MontoSolicitado;

            return ((CreditoPermitido() >= temporal) ? true : false);
        }

        private void TipoCredito()
        {
            switch (rdobtnlt_tipo_Credito.SelectedItem.Value)
            {
                case "1":
                    Session["TipoCredito"] = 1;

                    mtvw_tipo_Prestamo.SetActiveView(vw_prestamo_Personal);
                    break;

                case "2":
                    Session["TipoCredito"] = 2;

                    mtvw_tipo_Prestamo.SetActiveView(vw_prestamo_Diversos);
                    break;

                default:
                    break;
            }
        }

        private void CalculoCredito()
        {
            GC.Collect();

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                _credito = new WCF_Gimnasio.cls_Credito()
                 {
                     IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString()),
                     IdEmpleado = Convert.ToInt32(Session["IdEmpleado"]),
                     MontoSolicitado = Convert.ToDecimal(txt_monto_Prestamo.Text),
                     Plazo = short.Parse(Session["Plazo"].ToString()),
                     TasaAnual = 12,
                 };

                object resultado = string.Empty;
                servicio.OtrosProcesos(1, ref resultado, _credito);

                var tipoCredito = Convert.ToInt32(Session["TipoCredito"]);

                if (tipoCredito == 1)
                {
                    gv_prestamo_Personal.DataSource = servicio.Listar(1, _credito);
                    gv_prestamo_Personal.DataBind();
                }

                else if (tipoCredito == 2)
                {
                    decimal prima = Convert.ToDecimal(((!string.IsNullOrEmpty(txt_prima.Text)) ? txt_prima.Text : "0"));
                    _credito.MontoSolicitado -= prima;

                    gv_prestamo_Diversos.DataSource = servicio.Listar(1, _credito);
                    gv_prestamo_Diversos.DataBind();
                }
            }
        }

        private void LimpiarCampos()
        {
            txt_cod_Empleado.Text = string.Empty;
            txt_cedula.Text = string.Empty;
            txt_nombre_Completo.Text = string.Empty;
            
            txt_popup_cedula.Text = string.Empty;
            txt_popup_nombre_Completo.Text = string.Empty;

            txt_monto_Prestamo.Text = string.Empty;
            txt_prima.Text = string.Empty;

            dplt_plazo.SelectedIndex = -1;

            gv_prestamo_Diversos.DataSource = null;
            gv_prestamo_Diversos.DataBind();

            gv_prestamo_Personal.DataSource = null;
            gv_prestamo_Personal.DataBind();
        }

        #endregion

        #region Eventos

        protected void Page_Load(object sender, EventArgs e)
        {
            _empleado.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
        }

        protected void txt_cod_Empleado_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(txt_cod_Empleado.Text) || !string.IsNullOrWhiteSpace(txt_cod_Empleado.Text))
                {
                    var temp = Convert.ToInt32(txt_cod_Empleado.Text);

                    if (temp < 0)
                    {
                        Session["IdEmpleado"] = txt_cod_Empleado.Text;

                        BuscarEmpleado();

                        CargarEmpleado();
                    }
                }
            }

            catch (Exception)
            {
                string script = "<script type='text/javascript'> smoke.alert('Valor no permitido.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
        }

        protected void dplt_plazo_SelectedIndexChanged(object sender, EventArgs e)
        {
            var plazo = dplt_plazo.SelectedItem.Value;
            if (plazo != "Seleccione un plazo")
            {
                Session["Plazo"] = plazo;
            }

            else
            {
                Session["Plazo"] = 12;
            }
        }

        protected void rdobtnlt_tipo_Credito_SelectedIndexChanged(object sender, EventArgs e)
        {
            TipoCredito();

            btn_calcular_Prestamo.Visible = true;
            btn_aprobacion_Prestamo.Visible = false;

            gv_prestamo_Personal.DataSource = null;
            gv_prestamo_Personal.DataBind();

            gv_prestamo_Diversos.DataSource = null;
            gv_prestamo_Diversos.DataBind();
        }

        protected void btn_calcular_Prestamo_Click(object sender, EventArgs e)
        {
            if (VerficarFechaIngreso())
            {
                if (GetPromedioCredito())
                {
                    CalculoCredito();

                    btn_calcular_Prestamo.Visible = false;
                    btn_aprobacion_Prestamo.Visible = true;
                }

                else
                {
                    string script = "<script type='text/javascript'> smoke.alert('El salario actual del empleado no tiene suficiente liquidez.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
            }

            else
            {
                string script = "<script type='text/javascript'> smoke.alert('El empleado debe tener como minimo un año en la empresa.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
        }

        protected void btn_aprobacion_Prestamo_Click(object sender, EventArgs e)
        {
            _empleado = (WCF_Gimnasio.cls_Empleado)Session["empleado"];

            string mensajeError = string.Empty;

            _credito.IdGimnasio = 1;
            _credito.IdEmpleado = _empleado.IdEmpleado;
            _credito.FechaSolicitud = DateTime.Now;
            _credito.IdEstado = 1;

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                servicio.InsertarActualizarRegistro(true, ref mensajeError, _credito);
            }

            if(mensajeError != "")
            {
                string script = "<script type='text/javascript'> smoke.alert('Se ha realizado la aprobacion del prestamo con exito.'', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
            
            else
            {
                string script = string.Format("<script type='text/javascript'> smoke.alert('Se presento un incoveniete.\nPorfavor comunicarse con soporte tecnico.\n{0}', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>", mensajeError);
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
        }

        protected void btn_realizar_Pago_Click(object sender, EventArgs e)
        {
            if (lbl_cuota_Pagar.Text != "0,0000")
            {
                string mensajeError = string.Empty;

                using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
                {
                    servicio.InsertarActualizarRegistro(false, ref mensajeError, _credito);
                }

                if (mensajeError != "")
                {
                    string script = "<script type='text/javascript'> smoke.alert('Se realizo el pago correctamente.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }

                else
                {
                    string script = string.Format("<script type='text/javascript'> smoke.alert('Se presento un incoveniete.\nPorfavor comunicarse con soporte tecnico.\n{0}', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>", mensajeError);
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
            }

            else
            {
                string script = "<script type='text/javascript'> smoke.alert('Este empleado no tiene cuotas a pagar.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
        }

        #endregion

    }
}